package com.example.leetcode.prcatice;

import java.util.HashSet;
import java.util.Set;

/**
 * 给定链表头结点 head，该链表上的每个结点都有一个 唯一的整型值 。同时给定列表 nums，该列表是上述链表中整型值的一个子集。
 *
 * 返回列表 nums 中组件的个数，这里对组件的定义为：链表中一段最长连续结点的值（该值必须在列表 nums 中）构成的集合。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/linked-list-components
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Test817II {

    public int numComponents(ListNode head, int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int i :nums) {
            set.add(i);
        }
        ListNode pre = head;
        int res  = 0;
        boolean inset = false;
        while (pre != null) {
            int val = pre.val;
            if (set.contains(val)) {
                if (!inset) {
                    res++;
                    inset = true;
                }
            } else {
                inset = false;
            }
            pre = pre.next;
        }
        return res;
    }
}
